﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using GestionBudget.Objects;

namespace GestionBudget.Controls
{
    public partial class ucSousCategorie : ControlObject
    {
        private string CellValue;

        public ucSousCategorie()
        {
            InitializeComponent();
            dgvSousCategories.AutoGenerateColumns = false;
        }

        public override string TitreControl
        {
            get
            {
                return "Gestion des sous-catégories de transaction";
            }
        }

        public override bool Ajouter()
        {
            SousCategorie sc = SousCategorie.Creer(Securite.ProfilCourant);
            sc.AttribuerIdentifiant();
            sc.CategorieParent = DictionnaireDonnees.ListeCategories.First();

            ChargerListe();
            return true;
        }

        public override void Sauvegarder()
        {
            dgvSousCategories.EndEdit();

            foreach (ObjectPersistent sousCategorie in DictionnaireDonnees.ListeSousCategories.Where(pr => pr.EstNouveau || pr.EstModifie))
            {
                sousCategorie.Sauvegarder();
            }

            ChargerListe();
        }

        public override bool Supprimer()
        {
            if (dgvSousCategories.SelectedRows.Count > 0)
            {
                foreach (DataGridViewRow selectedRow in dgvSousCategories.SelectedRows)
                {
                    SousCategorie sc = selectedRow.DataBoundItem as SousCategorie;
                    DictionnaireDonnees.Supprimer(sc);
                }

                ChargerListe();
            }
            else
            {
                return false;
            }
            
            return true;
        }

        public override void ChargerListe()
        {
            dgvSousCategories.DataSource = Securite.ProfilCourant.ListeSousCategorie.ToList();
            DataGridViewComboBoxColumn colonneCategorie = dgvSousCategories.Columns["cCategorie"] as DataGridViewComboBoxColumn;
            colonneCategorie.DataSource = DictionnaireDonnees.ListeCategories.ToList();
            colonneCategorie.DisplayMember = "Description";
            colonneCategorie.ValueMember = "Self";
        }

        private void dgvSousCategories_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            DataGridView dgv = sender as DataGridView;
            object nouvelleValeur;

            if (dgv.CurrentCell != null && CellValue != null)
            {
                nouvelleValeur = dgv.CurrentCell.Value;
                if ((CellValue.Equals(nouvelleValeur)) && (!String.IsNullOrEmpty(nouvelleValeur.ToString())))
                {
                    (this.Parent as FormPrincipal).GestionBouton();
                }
                else if (String.IsNullOrEmpty(nouvelleValeur.ToString()))
                {
                    dgv.CurrentCell.Value = CellValue;
                }
            }
        }

        private void dgvSousCategories_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
        {
            CellValue = Convert.ToString((sender as DataGridView).CurrentCell.Value);
        }

        private void dgvDevises_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {
            MessageBox.Show("La valeur n'est pas valide.", "Avertissement", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        }
    }
}
